openUBMC 支持CPLD无感升级特性设计说明书
| 所属SIG组: | hardware SIG |
| 落入版本: | openUBMC 26.06 |
| 设计人员: | 常德兴 |
| 日期: | 2026-04-16 |
Copyright © 2026 openUBMC Community
您对"本文档"的复制,使用,修改及分发受木兰宽松许可证, 第2版协议(以下简称"MulanPSL2")的约束。 为了方便用户理解,您可以通过访问https://license.coscl.org.cn/MulanPSL2了解MulanPSL2的概要 (但不是替代)。 MulanPSL2的完整协议内容您可以访问如下网址获取:https://license.coscl.org.cn/MulanPSL2。
改版记录
| 日期 | 修订版本 | 修订描述 | 作者 | 审核 |
|---|---|---|---|---|
| 2026-04-16 | 1.0 | 初版创建 | 常德兴 | 已审核 |
目录
特性概述
1.1 目的
1.2 范围
1.3 特性需求列表需求场景分析
2.1 特性需求来源与价值概述
2.2 特性场景分析
2.3 特性影响分析特性/功能实现原理
3.1 目标
3.2 总体方案Use Case一实现:CPLD无感升级主流程
4.1 设计思路
4.2 约束条件
4.3 详细实现
4.4 关键接口Use Case二实现:CPLD无感升级类型配置
5.1 设计思路
5.2 约束条件
5.3 详细实现
5.4 关键接口Use Case三实现:CPLD无感升级前置处理配置
6.1 设计思路
6.2 约束条件
6.3 详细实现
6.4 关键接口Use Case四实现:CPLD无感升级逻辑数据持久化
7.1 设计思路
7.2 约束条件
7.3 详细实现
7.4 关键接口Use Case五实现:CPLD无感升级专用GPIO
8.1 设计思路
8.2 约束条件
8.3 详细实现
8.4 关键接口Use Case六实现:CPLD无感升级BMC与消费模块的交互
9.1 设计思路
9.2 约束条件
9.3 详细实现
9.4 关键接口Use Case七实现:CPLD无感升级涉及的寄存器保存和恢复
10.1 设计思路
10.2 约束条件
10.3 详细实现
10.4 关键接口可靠性&可用性设计
11.1 冗余设计
11.2 故障管理
11.3 过载控制设计安全&隐私&韧性设计
12.1 安全威胁分析及设计
12.2 隐私风险分析特性非功能性质量属性相关设计
13.1 可测试性
13.2 可服务性
13.3 可演进性
13.4 兼容性参考资料清单
表目录
表1:特性场景相关性分析
表2:特性需求列表
表3:无感升级类型说明
图目录
图1:CPLD无感升级整体流程图
图2:CPLD无感升级时序图
图3:BMC与消费模块交互时序图
1. 特性概述
openUBMC 支持CPLD无感升级特性旨在实现CPLD固件升级过程中业务不中断,兼容鲲鹏和昇腾产业的无感升级流程。该特性通过信号监听、消费模块协同、逻辑数据持久化、GPIO控制等多个子功能的协同配合,在不影响系统业务的前提下完成CPLD固件刷新。
本特性采用CSR可配置的扩展架构,支持灵活配置无感升级涉及的寄存器保存恢复对象、消费模块寄存器对象、逻辑数据持久化属性、专用GPIO等,满足不同产品形态的定制化需求。
1.1 目的
本文档基于openUBMC支持CPLD无感升级需求分析,对该特性的功能进行详细设计,明确系统架构、接口规范和实现方案,作为后续软件开发人员、测试人员和硬件集成工程师的技术指导文档。
文档详细描述了无感升级主流程、类型配置、前置处理、逻辑数据持久化、专用GPIO控制、BMC与消费模块交互、寄存器保存恢复等核心子功能的设计与实现,为开发团队提供全面的技术规范和实现指南。
1.2 范围
CPLD无感升级特性主要包含以下功能模块和适用场景:
核心功能模块:
- CPLD无感升级主流程:信号监听、升级类型解析、全流程调度控制
- 升级类型配置:通过update.cfg区分不同无感升级策略
- 前置处理配置:无感升级前置条件检测,如等待BIOS启动完成
- 逻辑数据持久化:通知CPLD将逻辑数据存储到内部flash
- 专用GPIO控制:控制CPLD旁路代码与用户逻辑代码的切换
- BMC与消费模块交互:协调各消费模块对CPLD访问的保护与恢复
- 寄存器保存与恢复:升级前保存、升级后恢复CPLD相关寄存器
适用场景分析:
| 场景编号 | 场景1 | 场景2 | 场景3 |
|---|---|---|---|
| 场景名称 | 鲲鹏产业无感升级 | 昇腾产业无感升级 | CPLD热升级/冷升级 |
| 特性是否相关 | √ | √ | √ |
| 实现状态 | 设计中 | 设计中 | 兼容 |
1.3 特性需求列表
CPLD无感升级特性需求清单:
| 需求编号 | 需求名称 | 特性描述 | 优先级 |
|---|---|---|---|
| CPLD-NS-001 | 无感升级主流程 | 支持CPLD无感升级完整流程,监听信号并调度各子功能 | P0 |
| CPLD-NS-002 | 升级类型配置 | 支持update.cfg中配置无感升级类型,策略选择对应升级流程 | P0 |
| CPLD-NS-003 | 前置处理配置 | 支持无感升级前置处理配置,如等待BIOS启动完成 | P0 |
| CPLD-NS-004 | 逻辑数据持久化 | 支持通知CPLD进行数据存储到逻辑内部flash | P0 |
| CPLD-NS-005 | 专用GPIO控制 | 支持无感升级专用GPIO控制,通知CPLD代码切换 | P0 |
| CPLD-NS-006 | 消费模块交互 | 支持BMC与消费模块协同完成CPLD访问保护与恢复 | P0 |
| CPLD-NS-007 | 寄存器保存恢复 | 支持无感升级前寄存器保存,升级后寄存器恢复 | P0 |
2. 需求场景分析
2.1 特性需求来源与价值概述
需求来源背景:
openUBMC CPLD无感升级特性需求主要来源于实际生产部署中对业务连续性的强烈诉求:
CPLD升级导致业务中断:
- 传统CPLD热升级或冷升级方式会导致CPLD在升级过程中无法访问
- CPLD管理大量硬件信号,升级期间会引发业务中断、误告警等问题
- 对可用性要求高的数据中心场景无法接受较长的升级中断时间
多平台产业兼容需求:
- 鲲鹏和昇腾产业的无感升级流程存在差异,需要统一框架兼容
- 不同产品形态CPLD的寄存器保存、逻辑数据处理方式各有不同
- 需要可配置化的扩展架构支撑多样化产品需求
BMC与消费模块协同难题:
- 无感升级期间CPLD的访问会出现异常,需要通知各消费模块暂停对CPLD的访问
- 各消费模块的就绪状态需要动态感知,协同保证升级安全窗口
价值概述:
CPLD无感升级特性通过完整的协同机制,全面解决了升级业务中断的挑战:
- 业务连续:通过逻辑数据持久化、GPIO切换和消费模块协同,实现升级期间业务不中断
- 可靠性强:升级前后完整的寄存器保存恢复机制,防止寄存器信息丢失
- 灵活可配:基于CSR的动态配置架构,满足不同产品差异化需求
- 兼容历史:新增配置对历史热升级和冷升级不产生影响
- 告警无误:升级期间主动屏蔽CPLD访问,防止误告警产生
2.2 特性场景分析
CPLD无感升级特性的业务使用场景主要涵盖设备在线升级的全过程:
主要应用场景:
- 鲲鹏产业无感升级场景:按鲲鹏无感升级标准流程完成CPLD升级
- 昇腾产业无感升级场景:按昇腾无感升级标准流程完成CPLD升级
- CPLD热升级/冷升级兼容场景:历史热升级和冷升级流程不受影响
关键场景分析:
| 使用者 | 场景频率 | 关键场景/任务 | 解决的痛点 | 操作描述 |
|---|---|---|---|---|
| 运维工程师 | 版本升级 | CPLD在线升级 | 升级导致业务中断 | 触发CPLD无感升级,业务全程不中断 |
| 网管人员 | 版本升级 | 升级过程监控 | 升级过程产生误告警 | 升级期间无误告警,升级完成后恢复正常 |
| 开发人员 | 特性调试 | 无感升级流程验证 | 不同产品差异化配置 | 通过CSR灵活配置各类无感升级参数 |
2.3 特性影响分析
CPLD无感升级特性对系统中的固件升级管理组件和硬件管理组件均有一定影响。
系统位置与周边接口:
- 升级管理组件负责监听升级信号、解析upgrade包和调度无感升级流程
- 硬件管理组件负责CPLD寄存器访问屏蔽/恢复、GPIO控制
- 通用硬件管理组件负责广播寄存器写入与消费模块寄存器轮询
- LogicFirmware对象新增多个属性,支持无感升级相关配置
关键约束与限制:
- 仅管理板配置为BMC平滑重启生效,不支持BMC强制复位生效
- 无感升级类型由update.cfg中的配置属性决定
- 消费模块寄存器对象和保存恢复寄存器对象均通过CSR配置,支持动态扩展
- 新增CSR配置不能影响历史CPLD热升级和冷升级流程
3. 特性/功能实现原理
3.1 目标
CPLD无感升级特性设计目标是构建一个可靠、可配置、兼容多产业的CPLD在线无感升级框架:
主要目标:
- 无感升级:升级期间业务连续,不产生误告警
- 高可靠:寄存器保存恢复、持久化数据等机制保障升级可靠性
- 灵活配置:基于CSR的可配置架构,满足不同产品差异
- 兼容性强:新增特性不影响历史热升级和冷升级流程
- 可维护:完整的升级日志记录
技术规格:
- 支持无感升级执行10次以上,固件升级均成功
- 升级期间不产生误告警
- 满足CPLD无感升级基线时间要求
- 前置处理等待BIOS启动完成超时时间为5分钟
- 逻辑数据持久化查询超时后回退到老流程
3.2 总体方案
系统概述:
CPLD无感升级特性以升级信号监听为入口,通过解析upgrade包中的update.cfg获取升级类型,调度并执行多个子功能协同完成无感升级。各子功能通过CSR配置动态扩展,支持不同产品形态的差异化需求。
架构设计原则:
- 信号驱动:以CPLD固件升级信号为触发,解耦升级时机与流程执行
- CSR可配:所有扩展对象(寄存器保存、消费模块、GPIO等)均通过CSR配置
- 步骤可选:每个子流程步骤均支持"未配置则跳过",保证兼容性
- 安全优先:升级前屏蔽CPLD访问,防止误告警;超时自动回退保障可靠性
图1:CPLD无感升级整体流程图
图2:CPLD无感升级时序图
4. Use Case一实现:CPLD无感升级主流程
4.1 设计思路
CPLD无感升级主流程通过监听CPLD固件升级信号,解析upgrade包中的update.cfg获取升级类型,按照预定流程调度各子功能协同完成无感升级。
实现思路:
升级信号监听:
- 监听CPLD固件升级信号,作为无感升级流程的入口
- 解析upgrade包中的update.cfg文件,获取当前无感升级类型
- 根据升级类型策略选择对应升级流程执行
分阶段流程调度:
- 阶段一:升级svf1刷新flash到CPLD,同步完成CPLD访问屏蔽和寄存器保存
- 阶段二:广播通知消费模块准备,等待消费模块就绪
- 阶段三:执行前置处理(如等待BIOS启动)和逻辑数据持久化
- 阶段四:升级svf2执行硬件锁IO,控制专用GPIO
- 阶段五:升级svf3执行硬件释放IO,恢复寄存器
- 阶段六:广播通知消费模块完成,控制GPIO切换回用户逻辑
可选步骤设计:
- 每个子功能步骤均判断CSR是否配置了对应对象/属性
- 未配置则直接跳过该步骤,保证历史版本兼容性
- 关键步骤失败直接终止流程,返回升级失败
异常回退机制:
- svf1升级失败直接结束,返回升级失败
- 逻辑数据持久化超时则退出无感升级,回退到老流程
4.2 约束条件
前提条件:
- BMC运行正常,CPLD固件升级信号可正常监听
- upgrade包中包含有效的update.cfg文件和svf升级文件
限制条件:
- 仅支持BMC平滑重启生效,不支持BMC强制复位生效
- 仅管理板配置为BMC平滑重启生效
可靠性要求:
- 执行CPLD无感升级10次以上,固件升级均成功
- 升级期间不能产生误告警
兼容性要求:
- 新增配置不能影响历史CPLD热升级和冷升级流程
4.3 详细实现
主流程步骤说明:
- 监听到CPLD固件升级信号后,解析update.cfg获取无感升级类型
- 升级svf1刷新flash的文件到CPLD:
- 成功:屏蔽CPLD访问,根据CSR配置的寄存器对象保存相关寄存器信息(未配置则跳过)
- 失败:直接结束CPLD无感升级流程,返回升级失败
- 写BMC广播寄存器值为1,通知各消费模块准备开始CPLD无感升级(未配置则跳过)
- BMC周期获取所有消费模块寄存器的值(未配置则跳过):
- 读取到任一消费模块寄存器值是0,则继续等待
- 读取到所有消费模块寄存器值是1,则跳出等待,继续后续的流程
- 升级前置处理等待bios启动完成(未配置则跳过)
- 写逻辑数据持久化通知寄存器,通知CPLD进行数据存储(未配置则跳过)
- 查询CPLD是否保存数据到flash完成(未配置则跳过):
- 超时前数据持久化完成,则继续后续的流程
- 超时也未完成数据持久化,则退出当前无感升级,回退到老流程
- 升级svf2通知CPLD执行硬件锁IO
- 控制无感升级专用GPIO从1→0,通知旁路代码继续锁存IO(未配置则跳过)
- 升级svf3通知CPLD执行硬件释放IO
- 恢复相关寄存器信息(未配置则跳过)
- 清除屏蔽CPLD访问
- 写BMC广播寄存器值为2,通知各消费模块CPLD无感升级完成(未配置则跳过)
- BMC周期获取所有消费模块寄存器的值(未配置则跳过):
- 读取到任一消费模块寄存器值是1,则继续等待
- 读取到所有消费模块寄存器值是0,则跳出等待,继续后续的流程
- 写BMC广播寄存器值为0(未配置则跳过)
- 控制无感升级专用GPIO从0→1,通知CPLD降IO切换回用户逻辑控制(未配置则跳过)
4.4 关键接口
升级流程调度接口:
- 信号监听接口:监听CPLD固件升级信号
- 配置解析接口:解析update.cfg获取无感升级类型
- 流程控制接口:支持流程启动、停止、回退
- 日志记录接口:记录CPLD无感升级关键步骤日志
5. Use Case二实现:CPLD无感升级类型配置
5.1 设计思路
不同的无感升级包处理流程不同,因此需要通过update.cfg中的配置属性区分升级类型,以便策略选择对应的升级流程执行。
实现思路:
update.cfg属性扩展:
- update.cfg文件中新增属性用于区分无感升级的类型
- 属性来源于upgrade包,随升级包下发给BMC
类型解析与策略选择:
- 解析update.cfg文件获取当前hpm包的升级类型
- 根据升级类型策略选择对应升级流程执行
- 不同类型对应不同的子功能配置组合
5.2 约束条件
前提条件:
- upgrade包中包含有效的update.cfg文件
- update.cfg中的升级类型属性值在已定义的类型范围内
兼容性要求:
- 历史upgrade包若未配置无感升级类型属性,不能影响历史CPLD升级流程
5.3 详细实现
解析与策略选择流程:
- 升级信号触发后,读取upgrade包中的update.cfg文件
- 解析获取升级类型
- 根据升级类型选择对应的升级流程策略
- 执行选定的升级流程
5.4 关键接口
update.cfg解析接口:
- 类型读取接口:读取update.cfg中的无感升级类型属性
- 策略选择接口:根据升级类型返回对应的升级流程策略
- 日志记录接口:记录逻辑数据持久化的结果
6. Use Case三实现:CPLD无感升级前置处理配置
6.1 设计思路
CPLD无感升级可能存在不同的前置条件和处理,如需要等待BIOS启动完成后才能继续进行数据持久化流程。通过新增无感升级前置处理配置对象,支持灵活配置不同的前置条件检测逻辑。
实现思路:
前置处理配置对象:
- 新增无感升级前置处理配置对象,用于指定无感升级前需要执行的前置处理
- 前置处理配置在CSR中配置,满足动态扩展需求
BIOS启动等待:
- 刷新flash之后,需要等待BIOS启动完成,超时时间5分钟
- BIOS启动完成或超时,开始进行逻辑数据持久化流程
可选执行:
- 未配置前置处理对象则跳过此步骤,保证兼容性
6.2 约束条件
前提条件:
- BMC运行正常,可正常访问BIOS启动状态寄存器
超时要求:
- 等待BIOS启动完成的超时时间为5分钟
可维护性要求:
- 记录BIOS的启动状态到升级日志
6.3 关键接口
前置处理接口:
- 配置读取接口:从CSR读取前置处理配置对象
- 状态查询接口:查询BIOS启动状态
- 超时控制接口:支持可配置超时时间
- 日志记录接口:记录BIOS启动状态及等待结果
7. Use Case四实现:CPLD无感升级逻辑数据持久化
7.1 设计思路
CPLD无感升级涉及SRAM刷新,为避免逻辑数据丢失,需在升级前通知CPLD将逻辑运行数据存储到内部flash,升级完成后CPLD从flash恢复数据,实现数据无感。
实现思路:
LogicFirmware对象属性扩展:
- LogicFirmware对象下新增属性,用于通知CPLD进行数据存储到逻辑内部flash
- LogicFirmware对象下新增属性,用于获取CPLD是否保存数据到flash完成
持久化通知与查询:
- 写入持久化通知寄存器,触发CPLD开始执行数据持久化
- 周期查询持久化完成状态寄存器,直到完成或超时
超时回退机制:
- 查询超时则退出无感升级流程,回退到老流程,保障升级可靠性
7.2 约束条件
前提条件:
- CPLD支持逻辑数据持久化功能,并有对应的通知和查询寄存器
超时要求:
- 持久化完成查询超时时,回退到老流程,不阻塞后续升级
可维护性要求:
- 记录逻辑数据持久化的结果(成功/超时/失败)
7.3 详细实现
逻辑数据持久化流程:
- 检查LogicFirmware对象是否配置了持久化通知寄存器属性,未配置则跳过
- 写持久化通知寄存器,通知CPLD开始数据存储
- 检查是否配置了持久化完成查询寄存器,未配置则跳过查询
- 周期轮询持久化完成查询寄存器:
- 读取到完成标志(值=1),继续后续流程
- 超时未完成,记录日志,回退到老升级流程
7.4 关键接口
逻辑数据持久化接口:
- 通知写入接口:向持久化通知寄存器写入触发值
- 完成查询接口:轮询持久化完成查询寄存器
- 超时控制接口:持久化完成等待超时控制
- 日志记录接口:记录持久化操作结果
8. Use Case五实现:CPLD无感升级专用GPIO
8.1 设计思路
CPLD无感升级过程中,需要通过专用GPIO信号通知CPLD从旁路代码切换到用户逻辑代码,确保CPLD内部代码感知升级进度并作出相应切换动作。
实现思路:
LogicFirmware对象属性扩展:
- LogicFirmware对象下新增属性,关联无感升级专用GPIO对象
- 通过CSR配置专用GPIO引用,满足不同产品的GPIO差异
GPIO控制时序:
- 刷新SRAM成功后(svf2完成后),控制无感升级专用GPIO从1→0,通知旁路代码继续锁存IO
- 无感升级完成后(svf3完成后),控制无感升级专用GPIO从0→1,通知CPLD降IO切换回用户逻辑控制
可选配置:
- 未配置专用GPIO则跳过GPIO控制步骤,保证兼容性
8.2 约束条件
前提条件:
- 专用GPIO可正常访问和控制
- CPLD旁路代码能正确响应GPIO信号
时序要求:
- GPIO从1→0必须在svf2升级后、svf3升级前执行
- GPIO从0→1必须在升级完成后(所有消费模块确认完成后)执行
可维护性要求:
- 记录专用GPIO的控制操作和当前值到升级日志
8.3 详细实现
GPIO控制流程:
- 检查LogicFirmware对象是否配置了专用GPIO属性,未配置则跳过
- svf2(硬件锁IO)升级成功后:
- 控制无感升级专用GPIO从1→0
- 记录GPIO控制操作日志
- svf3(硬件释放IO)升级成功且完成消费模块通知后:
- 控制无感升级专用GPIO从0→1
- 记录GPIO控制操作日志
8.4 关键接口
专用GPIO控制接口:
- GPIO读取接口:读取当前GPIO值
- GPIO写入接口:控制GPIO输出值(0或1)
- 配置读取接口:从CSR读取专用GPIO配置
- 日志记录接口:记录GPIO控制操作和值
9. Use Case六实现:CPLD无感升级BMC与消费模块的交互
9.1 设计思路
无感升级期间CPLD的访问会出现异常,因此需要完成对CPLD的访问保护后,才能开始无感升级中硬件锁IO及刷新SRAM的处理。BMC需要与各消费模块协同,确保所有消费模块停止对CPLD的访问后再继续升级流程。
实现思路:
BMC广播寄存器:
- BMC在LogicFirmware对象下新增属性,关联寄存器用于广播通知各消费模块
消费模块寄存器对象:
- 新增消费模块的寄存器对象,用于与BMC交互无感升级过程中的信息
- 消费模块寄存器对象在CSR中配置,满足动态扩展(不同产品消费模块数量各异)
双向握手交互:
- 升级开始前:BMC写广播寄存器=1,消费模块收到通知后停止CPLD访问并写本模块寄存器=1
- BMC等待所有消费模块寄存器=1后,开始无感升级核心流程
- 升级完成后:BMC写广播寄存器=2,消费模块恢复CPLD访问并写本模块寄存器=0
- BMC等待所有消费模块寄存器=0后,写广播寄存器=0,完成交互
图3:BMC与消费模块交互时序图
9.2 约束条件
前提条件:
- 各消费模块能正常监听广播寄存器并响应
- 消费模块寄存器可正常读写
限制条件:
- 消费模块寄存器对象数量和内容通过CSR配置,不支持运行时动态增减
- 所有消费模块均响应完毕才能继续升级流程(当前无超时保护,需根据产品实际情况配置)
可维护性要求:
- 记录BMC广播寄存器和消费模块寄存器的值变化到升级日志
9.3 详细实现
交互流程:
- 检查LogicFirmware对象是否配置了广播寄存器,未配置则跳过广播步骤
- 写广播寄存器=1,广播通知所有消费模块准备
- 检查是否配置了消费模块寄存器对象,未配置则跳过等待步骤
- 周期轮询所有消费模块寄存器:
- 任一消费模块寄存器=0,继续等待
- 所有消费模块寄存器=1,继续无感升级核心流程
- 无感升级完成后,写广播寄存器=2
- 周期轮询所有消费模块寄存器:
- 任一消费模块寄存器=1,继续等待
- 所有消费模块寄存器=0,继续后续流程
- 写广播寄存器=0,交互完成
9.4 关键接口
消费模块交互接口:
- 广播寄存器写入接口:写BMC广播寄存器值
- 消费模块状态查询接口:轮询所有消费模块寄存器值
- 配置读取接口:从CSR读取消费模块寄存器对象列表
- 日志记录接口:记录广播寄存器和消费模块寄存器的值变化
10. Use Case七实现:CPLD无感升级涉及的寄存器保存和恢复
10.1 设计思路
无感升级会导致CPLD寄存器信息丢失,因此需要BMC在升级前对相关寄存器进行保存,升级后进行恢复,确保寄存器信息不因升级而丢失。
实现思路:
寄存器对象新增:
- 新增寄存器对象,保存CPLD涉及需要保存和恢复的寄存器信息
- 数量和信息来源CSR配置,满足动态扩展
升级前保存:
- svf1升级成功后,屏蔽CPLD访问
- 根据CSR配置的寄存器对象,依次读取并保存相关寄存器信息
升级后恢复:
- svf3升级(硬件释放IO)成功后,依次恢复所有已保存的寄存器信息
- 恢复完成后清除CPLD访问屏蔽
可选配置:
- 未配置寄存器保存对象则跳过保存和恢复步骤
10.2 约束条件
前提条件:
- CSR中正确配置了需要保存的寄存器对象
- 升级前后CPLD的相关寄存器地址不变
可靠性要求:
- 保存和恢复操作必须在CPLD访问屏蔽期间执行,防止误告警
可维护性要求:
- 记录相关寄存器的保存和恢复操作日志
兼容性要求:
- 新增寄存器对象配置不影响未配置该对象的历史版本
10.3 详细实现
寄存器保存流程:
- svf1升级成功后,屏蔽CPLD访问
- 检查LogicFirmware对象是否配置了寄存器保存对象,未配置则跳过
- 遍历所有配置的寄存器保存对象:
- 读取当前寄存器值
- 将值保存到对象的BackupValue字段
- 记录保存操作日志
- 完成所有寄存器保存后,继续消费模块广播通知流程
寄存器恢复流程:
- svf3升级成功后,执行寄存器恢复
- 检查是否配置了寄存器保存对象,未配置则跳过
- 遍历所有配置的寄存器保存对象:
- 读取BackupValue字段中的保存值
- 写回对应寄存器地址
- 记录恢复操作日志
- 完成所有寄存器恢复后,清除CPLD访问屏蔽
10.4 关键接口
寄存器保存恢复接口:
- 寄存器读取接口:读取指定CPLD寄存器值
- 寄存器写入接口:向指定CPLD寄存器写入值
- 配置读取接口:从CSR读取寄存器保存对象列表
- 日志记录接口:记录寄存器保存和恢复操作日志
11. 可靠性&可用性设计
11.1 冗余设计
- 流程回退保障:逻辑数据持久化超时时自动回退到老升级流程,保障升级成功率
- 配置缺省保障:各子功能步骤均有"未配置则跳过"逻辑,防止CSR配置错误导致升级失败
11.2 故障管理
- CPLD访问屏蔽:升级前主动屏蔽CPLD访问,升级后及时清除屏蔽,防止误告警
- 升级失败处理:svf升级失败时及时终止流程并返回失败状态,记录完整错误日志
- 寄存器保护:升级前完整保存CPLD关键寄存器,升级后及时恢复,防止数据丢失
11.3 过载控制设计
- 消费模块等待机制:通过寄存器握手机制确保消费模块有序响应,避免升级窗口竞争
- 前置处理超时控制:BIOS启动等待设置5分钟超时,防止无限等待阻塞升级流程
12. 安全&隐私&韧性设计
12.1 安全威胁分析及设计
主要威胁:
- 恶意触发CPLD无感升级流程
- 伪造upgrade包中的update.cfg篡改升级类型
- 未授权写入BMC广播寄存器或消费模块寄存器
防护措施:
- 升级触发需经过合法的固件升级鉴权流程
- upgrade包完整性校验防止包内容被篡改
- 寄存器访问基于已有的硬件访问控制机制
12.2 隐私风险分析
该特性主要处理CPLD固件升级和寄存器操作,不涉及用户个人数据,隐私风险较低
13. 特性非功能性质量属性相关设计
13.1 可测试性
- 执行CPLD无感升级10次以上,验证固件升级均成功
- 通过各个北向接口(Redfish/Web/CLI)即可验证CPLD无感升级
- 支持通过日志验证各子功能步骤的执行情况
13.2 可服务性
- 完整记录CPLD无感升级日志,包含每个关键步骤的执行结果
- 记录bios启动状态、逻辑数据持久化结果、寄存器保存恢复操作
- 记录BMC广播寄存器和消费模块寄存器的值变化
- 记录专用GPIO的控制操作和当前值
13.3 可演进性
- 基于CSR的可配置架构,各子功能对象均可通过CSR动态扩展
- 无感升级类型通过update.cfg配置,支持未来新增升级类型
- 消费模块寄存器对象支持动态扩展,适应不同产品消费模块数量差异
13.4 兼容性
- 新增配置注意新老版本兼容性,新的配置不能影响历史CPLD热升级和冷升级流程
- 各子功能步骤均支持"未配置则跳过",保证历史版本升级逻辑不受影响
- 兼容鲲鹏和昇腾产业的无感升级流程
14. 参考资料清单
NA